package netty.bytebuf;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.util.CharsetUtil;

public class NettyByteBuf {
    public static void main(String[] args) {
        /**
         * 创建一个 ByteBuf
         * ByteBuf 中包含一个数组 arr
         * 在 netty 的 ByteBuf 中, 不需要使用 flip 进行反转
         * 其底层维护了一个 readerIndex 和 一个 writerIndex
         * 通过 readerIndex 和  writerIndex 和  capacity， 将buffer分成三个区域
         * [0, readerIndex): 已读取区域
         * [readerIndex, writerIndex): 可读取区域
         * [writerIndex, capacity): 可写区域
         */
        ByteBuf buffer = Unpooled.buffer(20);
        System.out.println("可写区域: " + buffer.writableBytes());
        for (int i = 0; i < 10; i++) {
            buffer.writeByte(i);
        }
        System.out.println("可写区域: " + buffer.writableBytes());
        for (int i = 0; i < buffer.readableBytes(); i++) {
            System.out.println(buffer.getByte(i));
        }
        System.out.println("arrayOffset: " + buffer.arrayOffset());
        System.out.println("readerIndex: " + buffer.readerIndex());
        System.out.println("writerIndex: " + buffer.writerIndex());
        ByteBuf buf = Unpooled.copiedBuffer("hello, hello", CharsetUtil.UTF_8);
        System.out.println(buf.getCharSequence(3, 5, CharsetUtil.UTF_8));
    }
}
